home *** CD-ROM | disk | FTP | other *** search
- {
- Via SLMAIL v3.5C (#2081)
- -=> Quoting Joe Irwin to Maynard Philbrook <=-
- JI> either inline code or assembler that could be compiled to obj and
- JI> linked that would read the keyboard and if a key is not pressed in a
- JI> variable or set amount of time jump to a procedure. I'm talking about
- JI> a tsr routine and what I have in mind is a tsr dos screensaver. I've
- JI> been working on this forever and am just not good enough with interupts
- JI> or assembler to do it. I'm using tp 5.5 which does not support the asm
- JI> command but inline(/) only. Any help would be appreciated.
- JI> Joe Irwin
- JI> -!- FMail 0.92
- JI> ! Origin: MK Tech BBS-MK Software (513)237-7737 Dayton,OH HST/v32
- JI> (1:110/290)
- }
-
- Uses dos,crt;
-
- Const Set_Time :Word = 100; { 0 for no blanking }
- Var
- Temp,Temp1 : Integer;
- C :Char;
- Old_Screen :Array[0..1999] of Word;
- OLD_INT9, OLD_INT8 :Pointer;
- NO_Pressed :Word; { Counter }
- Saved_Flag :Word; { varifie Flag }
-
- {$F+}
- Procedure New_Int9; Assembler; { all of this could be done in TASM }
- asm Push ES;
- Push DS;
- Push BX;
- Push AX;
- Mov AX, Seg NO_Pressed;
- Mov DS, AX;
- Mov AX, Set_TIme;
- Mov NO_Pressed, AX;
- Mov AX, Word [Old_INT9];
- Mov Word ptr CS:@Return, AX;
- Mov AX, Word [OLD_INT9+2];
- Mov Word ptr CS:@Return+2, AX;
- Cmp Word Ptr Saved_Flag, 00;
- Je @Done;
- Mov Word ptr Saved_Flag, 00;
- Mov BX, 3999;
- Mov AX, $B800;
- Mov ES, AX;
- @loop:
- Mov AL, byte [OLD_SCREEN+BX];
- Mov [ES:BX], AL;
- Dec BX;
- Jnz @Loop;
- Mov AL, byte [OLD_SCREEN+BX];
- Mov [ES:BX], AL;
- @Done:
- Pop AX;
- Pop BX;
- Pop DS;
- Pop ES;
- Jmp [Dword(@Return)];
- @Return:
- DD 0;
- End;
-
- Procedure New_Int8; Assembler;
- ASm
- Push ES;
- Push DS;
- Push BX;
- Push AX;
- Mov AX, Seg NO_Pressed;
- Mov DS, AX;
- Mov AX, Word [Old_INT8];
- Mov Word ptr @Return, AX;
- Mov AX, Word [OLD_INT8+2];
- Mov Word ptr @Return+2, AX;
- Cmp NO_PRESSED, $00;
- Je @Done;
- Dec Word Ptr NO_PRESSED;
- Jnz @Done;
- Mov Saved_Flag, $01;
- Mov AX, $B800;
- Mov ES, AX;
- Mov BX, 3999;
- @loop:
- Mov AL, byte ptr [ES:BX];
- Mov byte ptr OLD_SCREEN+BX, AL;
- Mov byte [ES:BX], 0 ;
- Dec BX;
- Jnz @Loop;
- Mov AL, byte ptr [ES:BX];
- Mov byte ptr OLD_SCREEN+BX, AL;
- @DONE:
- Pop AX;
- Pop BX;
- Pop DS;
- Pop ES;
- Jmp [Dword(@Return)];
- @Return:
- DD 0;
- End;
-
- BEGIN
-
- Val(Paramstr(1), Temp, Temp1);
- If Temp1 = 0 Then Set_Time := temp*18;
- NO_PRESSED := Set_Time;
- SAVED_FLAG := 00;
- GetIntVec($08, OLD_INT8);
- GetIntVec($09, OLD_INT9);
- SetIntVec($09, @New_Int9);
- SetIntVec($08, @New_Int8);
-
-
- While NOT Keypressed DO;
- { process your program here }
-
- SetIntVec($08, old_int8); { to restore it back to normal }
- SetIntVec($09, old_int9);
- CLrScr;
- WriteLn(' Program Writen Bye Maynard A. Phibrook Jr. ');
- WriteLn(' 1-203-456-2521 (1993)');
-
- END.